//package com.sdhs.paas.gateway.filter;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.List;
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//
//import com.alibaba.fastjson.JSON;
//import com.netflix.zuul.ZuulFilter;
//import com.netflix.zuul.context.RequestContext;
//import com.sdhs.paas.gateway.config.AcmanageRuleConfig;
//import com.sdhs.paas.gateway.constant.AmeConstant;
//import com.sdhs.paas.gateway.model.AmeMenu;
//import com.sdhs.paas.gateway.model.AmeMenuPolicy;
//import com.sdhs.paas.gateway.util.PaasAccessUtil;
//import com.sdhs.paas.gateway.util.RequestUtils;
//
//public class AdminMenuFilter extends ZuulFilter
//{
//
//  @Value("${zuul.routes.menu.path}")	
//  private String menuPath;
//
//  @Autowired
//  private AcmanageRuleConfig acmanageRuleConfig;
//
//  public String filterType()
//  {
//    return "pre";
//  }
//
//  public int filterOrder()
//  {
//    return 5;
//  }
//
//  public boolean shouldFilter()
//  {
//    RequestContext context = RequestContext.getCurrentContext();
//    return context.getRequest().getServletPath().equals(this.menuPath);
//  }
//
//  public Object run()
//  {
//    String accountName = RequestUtils.getAccountName();
//    if (accountName == null) {
//      return null;
//    }
//
//    RequestContext context = RequestContext.getCurrentContext();
//
//    List menuList = new ArrayList();
//    List<AmeMenuPolicy> menuPolicyList = getMenuConfig();
//    for (AmeMenuPolicy menuPolicy : menuPolicyList)
//    {
//      AmeMenu ameMenu = new AmeMenu(menuPolicy
//        .getName(), menuPolicy
//        .getMenuType(), 
//        PaasAccessUtil.hasPolicy(accountName, menuPolicy
//        .getResource(), menuPolicy.getAction()), menuPolicy
//        .getDesc());
//
//      menuList.add(ameMenu);
//    }
//    try {
//      context.setSendZuulResponse(false);
//      context.getResponse().setContentType("application/json; charset=utf-8");
//      context.getResponse().getWriter().append(JSON.toJSONString(menuList));
//    } catch (IOException e) {
////      PaasLogger.error("convert to json error.", new Object[0]);
//    }
//
//    return null;
//  }
//
//  private List<AmeMenuPolicy> getMenuConfig()
//  {
//    List<AmeMenuPolicy> menuPolicyList = new ArrayList<AmeMenuPolicy>();
//    List<List<String>> menuRules = this.acmanageRuleConfig.getMenuRules();
//    for (List rule : menuRules)
//      if (rule.size() == AmeConstant.NumberEnum.FIVE.ordinal())
//      {
//        AmeMenuPolicy menuPolicy = new AmeMenuPolicy(
//          (String)rule
//          .get(0), 
//          AmeConstant.MenuTypeEnum.valueOf((String)rule
//          .get(1)), 
//          (String)rule
//          .get(2), 
//          (String)rule
//          .get(3), 
//          (String)rule
//          .get(4));
//
//        menuPolicyList.add(menuPolicy);
//      }
//    return menuPolicyList;
//  }
//}
